                                     KWASEK
                                   Prezentuje
                          Crackme 8.2 SE i 9.1 by JuBE
                                        

Nazwa Progu:    Crackme 8.2 SE i 9.1 by JuBE
Data:           27/09/2002
Napisal:        Kwasek
Co:             tutorial
Skill:          Medium+


      Witam   was  w  moim  nastpnym  tekcie  dotyczcym  oczywicie  jakiego
Crackmesa.  Crackmesa zrobionego przez JuBE (ale si uparem na jego crackmesy).
Na  pocztek  przedstawi jak wyglday zabezpieczenia w poprzednich crackmesach
JuBE.  Rozpoczniemy od wersji 8.1, ktr to oczywicie zamaem. A wic tak,  na
podstawie wpisanego w crackme seriala, tworzony by klucz, przy pomocy,  ktrego
by  odszyfrowany  spory  kawaek kodu, odszyfrowany  kod  powinien  by  dobrze
wykonujcym si kodem asemblera. Gwn trudnoci tego CrackMe byo to, e  nie
znalimy  dokadnej  dugoci klucza, a dugo klucza  moga  znajdowa  si  w
granicach   od  8  do  96  bitw.  Nastpn  trudnoci  byo  odgadnicie,   co
przypuszczalnie znajduje si w zaszyfrowanym kodzie. Ale z tym  i  z  tym  sobie
poradziem.  W  Crackme  znalazem dialoga z informacj  o  dobrym  hale.  Wic
przyjem jak powinna wyglda przypuszczalna procka wywoujca tego dialoga,  i
dziki  temu  napisaem specjalnego brutka, ktry bardzo szybko  pokae  nam,  w
ktrym miejscu wywoanie dialoga si znajduje i jakiej dugoci jest klucz.  Tak
byo w wersji 8.1. Nastpn wersj, ktr JuBE wyda to wersja 8.2 SE, specjalna
wersja  dla  Mnie. Crackme prawie niczym si nie rnio od poprzedniej  wersji,
zmieniona  oczywicie bya zakodowana procedura no i kluczyk.  Tak  samo  jak  w
poprzedniej wersji w crackme znajdowa si dialog z gratulacjami. A wic  uyem
tego  samego algorytmu, co w poprzedniej wersji, ale nic z tego nie wyszo. Moe
autor  zmieni  procke  informujc  o dobrym,  hale.  Sprbowaem  przez  Call
MessageBoxA,   ale  nic  z  tego.  Tak,  wic  przewidywaem  najgorsze,   autor
prawdopodobnie  rozdzieli instrukcje nopami lub innymi niewanymi  instrukcjami
lub jakimi dziwnymi niepotrzebnymi skokami.

Zamiast naszego przypuszczalnego

  6A00         push 0
  68AA194000   push offset loc_4019A9
  FF7508       push dword ptr [ebp+8]
  6A66         push 66h
  FF3500204000 push ds:hInstance
  E8xxxx0000   call DialogBoxParamA

Mg zrobi np.:

  90           nop
  6A00         push 0
  90           nop
  68AA194000   push offset loc_4019A9
  ????         jmp skok
skok:
  FF7508       push dword ptr [ebp+8]
  90           nop
  6A66         push 66h
  90
  FF3500204000 push ds:hInstance
  90           nop
  E8xxxx0000   callDialogBoxParamA

I  tak  prawdopodobnie zrobi autor oczywicie to jest przykad,  dokadnie  jak
autor  pomiesza instrukcje to nie wiemy. I raczej bymy si niedowidzieli gdyby
nie  mae uatwienie autora. Jeli ledzie CrackMe 8.1 pod SoftIce z poprawnym
kluczem to zauwaye e oprcz instrukcji asemblera, deszyfrowany jest  rwnie
jaki string z informacj.

Pocztek zdeszyfrowanej procedury wyglda tak: ###START####
A koniec caej procedury: ###END######

Tak sobie pomylaem ze w CrackMe 8.2 SE znajduj si te same stringi.

Poczatek:
CrackMe 8.1          rozkodowane:###START####
Crackme 8.2 SE       zakodowane: vrtEEYDLsvpq

Koniec:
CrackMe 8.1          rozkodowane:###END######
Crackme 8.2 SE       zakodowane: rtvTVRxsvpqv

Po zxorowaniu wyszo

Poczatek:
Crackme 8.2 SE rozkodowane: UQWPUSR hex-55,51,57,16,11,18,16,18,50,55,53,52

Koniec:
Crackme 8.2 SE rozkodowane: QWU[PUSRU hex-51,57,55,11,18,16,5b,50,55,53,52,55

Porownujac: 
            UQWPUSR hex-55,51,57,|16|,11,18,16,|18|,50,55,53,52
            UQWU[PUSR hex-55,51,57,|55|,11,18,16,|5b|,50,55,53,52

Nie do koca s rwne: 16=55,18=5b
Tak wiec przyjem:    16=16,18=18

Czyli: 16^'v' = '`' , 18^'x' = '`'

Wychodzi z tego ze zamiast '#' musi byc znak '`' ```START````
jeszcze raz zxorujmy  ```START```` ^ vrtEEYDLsvpq = hex -
16,12,14,16,11,18,16,18,13,16,10,11

No     dobra     odpaliem    CrackMe    i    zxorowaem    procke     z     tym
kluczem(161214161118161813161011)   i   udao   si   odszyfrowaem   zakodowan
informacje, tylko e po obliczeniu checksumy co wyszo le. Byo to spowodowane
nie  do  koca  dobrym  kluczem.  Np.: Napis  kWASKOWI  powinien  wyglda  tak:
Kwaskowi.  Czyli  mae  litery  trzeba zamieni na  due  i  odwrotnie.  A  wiec
sprawdziem, jakie s te znaki i doszedem do wniosku ze do kadego bajtu klucza
trzeba doda 20h.

I wyszo ze klucz skada si z cyfr hex - 363234363138363833363031
                                 string   - 624618683601

Jak  wida  zamaem to CrackMe, poniewa pocztkowy i kocowy  string  niewiele
rni   si   od   tych  znajdujcych  si  w  poprzednim  CrackMe.   Procedura
wywietlajca dialoga wyglda tak:

loc_401753:
                mov     eax, 66h
                push    eax
                jmp     short loc_401770
loc_40175B:
                push    eax
                pop     eax
                mov     eax, offset unk_401CE9
                push    eax
                nop
                push    dword ptr [ebp+8]
                jmp     short loc_401753

loc_401769:
                call    DialogBoxParamA
                jmp     short loc_40177A

loc_401770:
                mov     eax, hInstance
                push    eax
                nop
                jmp     short loc_401769
                nop
loc_40177A:
                jmp     short loc_4017D8
                nop

Wida,  e  jest  tu peno skokw, instrukcji nop. Dlatego mj algorytm  tu  nie
zadziaa. Gdyby autor nie zastosowa podobnych, stringw, nie rozwalibym  tego
CrackMe  no  chyba  ebym  znal  jaki  kawaek  kodu.  Szkoda  ze  nie   jestem
jasnowidzem:).

No  dobra  przysza kolej na wersj 9.1. CrackMe te w stylu deszyfrowanie  kodu
asemblera.  Jest  jedna  nowo, a mianowicie wszystkie informacje  np.  o  zym
serialu itp. wywietlane s na dolnym pasku. Zobaczmy, wic najpierw jak wyglda
zaszyfrowana procedura:

a1234jube5678 db '1234jube5678'
        dd 326BFAE9h, 4BC6E369h, 92733256h, 0C42181Ch, 190E1310h
        dd 4259161Ch, 10D4804h, 1B1B1816h, 0A5B1716h, 181F0D12h
        dd 12053E4Fh, 120A590Ah, 15180106h, 0A121F55h, 0D1530341h
        dd 6CEC7170h, 54E9BA41h, 6CE33DE0h, 76B5AEE9h, 64F14BE3h
        dd 0B9B2F9FAh, 0E367416Ch, 0F368F2A8h, 5C9391F9h, 395C5670h
        dd 0FFB76432h, 0E56F7973h, 725A57CDh, 21D1A26Bh, 0E201FD4Fh
        dd 6B036CCAh, 66F9F932h, 7389F5FFh, 0A26147E9h,  2F5A57D6h
        dd 9798E275h, 0A1F3FBA2h, 0B65DE976h, 0A2B17CE2h, 0BBA8F358h
        dd 0B2F6FF7Bh, 89A23E51h, 7C40F9E7h, 73325A47h,  0A22547E9h
        dd 4C5DCCF9h, 2FCB7235h, 0F9AA4C06h, 7576E0CAh,  2DF3E372h
        dd 7392B2FBh, 0E27C1AE9h, 2B115DCCh, 0E99C8232h, 0E371B5AEh
        dd 3DFBF14Bh, 0FFB840A1h, 0FAE3B2A4h, 0F97546F2h, 0E5FFA191h
        dd 1D557641h, 7A1C322Bh, 99E56F13h, 6FF0B046h, 7973D132h
        dd 0B1BB756Fh, 7924327Dh, 4F577349h, 59041D3Bh,  55E0E46h
        dd 4F0A1453h, 45163B52h, 1700564Bh, 71A1659h, 4B5D1D53h
        dd 0D120146h, 731A7550h, 5A6B327Dh, 6F39584Dh, 79725F1Dh
        dd 31079432h, 9D6F395Ch, 0CD868456h, 334BB503h,  51510779h
        dd 0F6DA7933h, 118C96C4h, 73325E4Bh, 72481611h,  99D99B69h
        dd 0F21B8D8Ah, 1322B10h, 752F5A57h, 0CD8FE29Ah,  5C0D5A94h
        dd 721F6F39h, 2B115D1Bh, 61E00132h, 7318752Fh, 43833213h
        dd 5C868C9Fh, 0BBBA32B5h
        db 36h, 6Bh, 0A2h
a8765jube4321 db '8765jube4321',0

Na pocztek musz powiedzie, e pierwszy i ostatni string nie jest deszyfrowany
wedug  klucza,  a  wic autor utrudni nam bardzo mocno ca spraw.  Nastpnie
doszed  nam  nowy  sposb  wywietlania informacji z gratulacjami.  Mgby  by
DialogBoxParamA,  MessageBoxA,  czy  nasz  nowy  wywietlany  na  dolnym  pasku.
Wywietlany tak samo bajerancko jak np. Please enter your name. Nawet jak  bymy
poznali  ktry ze sposobw wywietlania infa to nic by nam to nie dao poniewa
autor  pomiesza  na  pewno  instrukcje tak jak  w  wersji  8.2  SE.  Im  wicej
prbowaem co wymyli tym bardziej twierdziem, e Cm jest uncrackedable.  Ale
nie ma rzeczy niemoliwych, pokae w inny sposb zaszyfrowany kod:

E9-FA-6B-32-69-E3-C6-4B-56-32-73-92-1C-18-42-0C ..k2i..KV2s...B.
10-13-0E-19-1C-16-59-42-04-48-0D-01-16-18-1B-1B ......YB.H......
16-17-5B-0A-12-0D-1F-18-4F-3E-05-12-0A-59-0A-12 ..[.....O>...Y..
06-01-18-15-55-1F-12-0A-41-03-53-D1-70-71-EC-6C ....U...A.S.pq.l
41-BA-E9-54-E0-3D-E3-6C-E9-AE-B5-76-E3-4B-F1-64 A..T.=.l...v.K.d
FA-F9-B2-B9-6C-41-67-E3-A8-F2-68-F3-F9-91-93-5C ....lAg...h....\
70-56-5C-39-32-64-B7-FF-73-79-6F-E5-CD-57-5A-72 pV\92d..syo..WZr
6B-A2-D1-21-4F-FD-01-E2-CA-6C-03-6B-32-F9-F9-66 k..!O....l.k2..f
FF-F5-89-73-E9-47-61-A2-D6-57-5A-2F-75-E2-98-97 ...s.Ga..WZ/u...
A2-FB-F3-A1-76-E9-5D-B6-E2-7C-B1-A2-58-F3-A8-BB ....v.]..|..X...
7B-FF-F6-B2-51-3E-A2-89-E7-F9-40-7C-47-5A-32-73 {...Q>....@|GZ2s
E9-47-25-A2-F9-CC-5D-4C-35-72-CB-2F-06-4C-AA-F9 .G%...]L5r./.L..
CA-E0-76-75-72-E3-F3-2D-FB-B2-92-73-E9-1A-7C-E2 ..vur..-...s..|.
CC-5D-11-2B-32-82-9C-E9-AE-B5-71-E3-4B-F1-FB-3D .].+2.....q.K..=
A1-40-B8-FF-A4-B2-E3-FA-F2-46-75-F9-91-A1-FF-E5 .@.......Fu.....
41-76-55-1D-2B-32-1C-7A-13-6F-E5-99-46-B0-F0-6F AvU.+2.z.o..F..o
32-D1-73-79-6F-75-BB-B1-7D-32-24-79-49-73-57-4F 2.syou..}2$yIsWO
3B-1D-04-59-46-0E-5E-05-53-14-0A-4F-52-3B-16-45 ;..YF.^.S..OR;.E
4B-56-20-17-59-16-1A-07-53-1D-5D-4B-46-01-12-0D KV .Y...S.]KF...
50-75-1A-73-7D-32-6B-5A-4D-58-39-6F-1D-5F-72-79 Pu.s}2kZMX9o._ry
32-94-07-31-5C-39-6F-9D-56-84-86-CD-03-B5-4B-33 2..1\9o.V.....K3
79-07-51-51-33-79-DA-F6-C4-96-8C-11-4B-5E-32-73 y.QQ3y.....K^2s
11-16-48-72-69-9B-D9-99-8A-8D-1B-F2-10-2B-32-01 ..Hri........+2.
57-5A-2F-75-9A-E2-8F-CD-94-5A-0D-5C-39-6F-1F-72 WZ/u.....Z.\9o.r
1B-5D-11-2B-32-01-E0-61-2F-75-18-73-13-32-83-43 .].+2..a/u.s.2.C
9F-8C-86-5C-B5-32-BA-BB-36-6B-A2-               ...\.2..6k.

Tak si temu przygldaem a zauwayem 3 bajty (syo) powtarzaj si jeszcze raz
z  tym, e jest jeszcze dodana jedna literka (syou). To chyba jest jaki kawaek
jakiego  sowa.  Ale  jakim  cudem one tam si znalazy?.  Ot  wyobra  sobie
sytuacj,  gdy jaki bajt naszego klucza xorowany jest przez 00h. A wiemy  chyba
jak dziaa XOR, w wyniku xora uzyskamy nasz bajt z klucza. Czyli:
syo   przed xorem byy 3 zerowe bajty 00h,00h,00h
syou - przed xorem byy 4 zerowe bajty 00h,00h,00h,00h
No  dobra wedug 2 sowa nastpna litera to (u), wic zxorujmy nastpny  bajt  1
sowa  po literze (o) z liter (u). Czyli E5^75(u), wyszo nam 90h. Skd  ja  to
znam,  czyby to by Nop. A wic jestemy na dobrej drodze. Teraz, gdy  znamy  4
znaki   klucza  (syou)  moemy  przystpi  do  obliczenia  dugoci  klucza   i
pozostaych  znakw.  Zaaduj sobie do jakiego Hex edytora  nasz  zaszyfrowan
procke,  ja  to zrobiem z HEdit. Gdy to zrobisz wska w pierwszym sowie  (syo)
pierwszy  znak czyli liter (s). Na dole pokae si file offset ktry si  rwna
104.  Nastpnie zrb tak samo z drugim sowem i tak samo pierwsz liter, wyszo
258.  Teraz odejmij 258-104=154. Teraz gdy mamy t magiczn warto 154 dzielimy
j  przez  dugo  klucza.  Jak wiemy maksymalna dugo  klucza  moe  by  96
bitowa(12 znakw). Gdy to podzielimy i uzyskamy reszt to na pewno klucz  o  tej
dugoci nie by uyty do zaszyfrowania caej procki jeli nie da reszty to moe
to by dobra dugo klucza. Co nam wyszo?:

154/12 = 12,833..  na pewno nie ten
154/11 = 14       - moliwa d. Klucza
154/10 = 15,4     - na pewno nie ten
154/9  = 17,111.. - na pewno nie ten
154/8  = 19,25    - na pewno nie ten
154/7  = 22       - moliwa d. Klucza
154/6  = 25,666   - na pewno nie ten
154/5  = 30,8     - na pewno nie ten

A  wic  klucz  jest o dugoci (7)56 bitowej lub (11)88 bitowej. Mamy  tylko  2
kombinacje  ja  postawiem na ten duszy klucz. Teraz,  gdy  znamy  d.  Naszej
magicznej wartoci musimy si dowiedzie, w jakim miejscu znajduj si  nasze  4
poznane  znaki (syou). Musisz po prostu zxorowa ca procke dowolnym 88 bitowym
kluczem,  podczas  xorowania bdziesz musia zapamita, jakie  znaki  z  klucza
xoroway  nasze pierwsze sowo (syo). Ja ju wiem nasz kluczyk na razie  wyglda
tak:

xxxxxsyouxx

Znamy ju pozycj naszych znakw, moemy ju przystpi do zdeszyfrowania caego
zaszyfrowanego kodu w celu odkrycia cz naszego kodu asemblera. Na pocztku to
wyglda tak:

E9h,FAh,6Bh,32h,69h,|E3h,C6h,4Bh,56h|,32h,73h
 x   x   x   x   x    s   y   o   u    x   x

pierwsze 5 bajtw nie xorujemy bo nie mamy na razie przez co, nastpnie
s^E3h = 90h
y^C6h = BFh
o^4Bh = 24h
u^56h = 23h
Inaczej   zapisujc  90BF2423,  hmm  90  to  jest  nop  BF2423  to  jest   jaki
niedokoczony  mov.  I  tu wida, e prawdopodobnie jest  to  jaki  mov,  ktry
kopiuje  adres, czyli wedug mnie powinno wyglda to tak BF24234000 czyi  adres
00402324h. Zxorujmy 2 nowe wartoci aeby pozna 2 nastpne znaki kluczyka:
40h^32h = r
00h^73h = s

Nasza magiczna warto wyglda teraz tak:

xxxxxsyours

Teraz  jeszcze  raz  mona zdeszyfrowa cay kod przy pomocy  naszego  klucza  i
poszuka  nowych  urwanych instrukcji asemblera w celu  znalezienia,  nastepnych
znakw klucza, lub odszyfrowanie tekstu:

Tak  wygld pocztek procki zdeszyfrowanej kluczem xxxxxsyours oczywicie  x  to
00h


..k2i.$#@...B.
cjalneYB.H.rowni
e.[...la Kwa.Y..
.raz ma

.raz tu chyba bdzie oraz

o^06h=i

teraz nasz klucz ma wygld:

xxxxisyours

Ponownie zdeszyfruj wedug nowego klucza

Tak teraz to wyglda

..k2 ..$#@ ..Be
cjalneYB.Hdrowni
e.[..dla Kwa.Y..
oraz ma.A.S

'dla Kwa.Y.' chyba powinno by 'dla Kwaska'

xorujemy:

's'^0Ah = 'y'
'k'^59h = '2'
'a'^0Ah = 'k'

Nasza magiczna warto ma teraz posta:

y2kxisyours

Jeszcze raz deszyfrujemy przy pomocy tego kluczyczka:

.. 2 ..$#@ ..sBe
cjalne poHdrowni
enia.dla Kwaska.
oraz massh.

sowo 'sBecjalne' powinno chyba wyglda tak 'specjalne'

xorujemy:

'p'^'B' = '2'

I TAK OTRZYMALIMY OSTATECZN WARTO KLUCZA, KTRA MA POSTA:

y2k2isyours

Opisaem  jak  zawsze  w  tego  typu  crackme najtrudniejsz  cz  jakim  jest
znalezienie  klucza  przez  ktry szyfrowany jest  spory  kawaek  kodu.  Znajc
poprawny  klucz moesz ju przystpi do wyliczenia seriala. Jeli  co  ci  nie
wychodzi, obejrzyj source keygena.
